package com.ruoyi.hyg.service.impl;

import java.util.List;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.points.domain.OrderInfo;
import com.ruoyi.points.mapper.OrderInfoMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.hyg.mapper.noticeMapper;
import com.ruoyi.hyg.domain.notice;
import com.ruoyi.hyg.service.InoticeService;

/**
 * 通知管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-13
 */
@Service
public class noticeServiceImpl implements InoticeService 
{
    @Autowired
    private noticeMapper noticeMapper;
    
    @Autowired
    private SysUserMapper userMapper;
    
    @Autowired
    private OrderInfoMapper orderInfoMapper;
    /**
     * 查询通知管理
     * 
     * @param id 通知管理主键
     * @return 通知管理
     */
    @Override
    public notice selectnoticeById(Long id)
    {
        return noticeMapper.selectnoticeById(id);
    }

    /**
     * 查询通知管理列表
     * 
     * @param notice 通知管理
     * @return 通知管理
     */
    @Override
    public List<notice> selectnoticeList(notice notice) {
        List<notice> list = noticeMapper.selectnoticeList(notice);
        // 手动补充用户名和订单状态显示
        list.forEach(item -> {
            if(item.getTypeId() == 2 && item.getUserId() != null) {
                SysUser user = userMapper.selectUserById(item.getUserId());
                if(user != null) {
                    item.setUserName(user.getUserName());
                }
                // 转换订单状态为中文
                if(item.getOrderStatus() != null) {
                    switch(item.getOrderStatus()) {
                        case "PENDING": item.setOrderStatus("待支付"); break;
                        case "PAID": item.setOrderStatus("已支付"); break;
                        case "CLOSED": item.setOrderStatus("已关闭"); break;
                    }
                }
            }
        });
        return list;
    }

    /**
     * 新增通知管理
     * 
     * @param notice 通知管理
     * @return 结果
     */
    @Override
    public int insertnotice(notice notice) {
        // 设置默认值
        if (notice.getDel() == null) {
            notice.setDel(1L);
        }

        if (notice.getTypeId() == 2) {
            // 个人消息类型
            if (notice.getUserId() == null) {
                throw new ServiceException("个人消息必须指定用户ID");
            }

            SysUser user = userMapper.selectUserById(notice.getUserId());
            if (user == null) {
                throw new ServiceException("用户ID不存在");
            }

            // 只有当content是纯数字时才尝试关联订单
            if (notice.getContent() != null && notice.getContent().matches("^\\d+$")) {
                try {
                    Integer orderId = Integer.parseInt(notice.getContent());
                    OrderInfo order = orderInfoMapper.selectOrderInfoById(orderId);
                    if (order != null) {
                        notice.setOrderNo(order.getOrderNo());
                        notice.setAmount(order.getAmount());
                        notice.setOrderStatus(order.getStatus());
                    }
                } catch (NumberFormatException e) {
                    // 如果content不是数字，则忽略订单关联
                    // 这允许content包含HTML内容或其他文本
                }
            }
        } else if (notice.getTypeId() == 1) {
            // 系统通知类型，清除用户相关字段
            notice.setUserId(null);
        }

        return noticeMapper.insertnotice(notice);
    }

    /**
     * 修改通知管理
     * 
     * @param notice 通知管理
     * @return 结果
     */
    @Override
    public int updatenotice(notice notice) {
        if (notice.getTypeId() == 1) {
            // 系统通知类型，清除用户相关字段
            notice.setUserId(null);
        } else if (notice.getTypeId() == 2) {
            // 个人消息类型
            if (notice.getUserId() == null) {
                throw new ServiceException("个人消息必须指定用户ID");
            }

            // 验证用户是否存在
            SysUser user = userMapper.selectUserById(notice.getUserId());
            if (user == null) {
                throw new ServiceException("用户ID不存在");
            }

            // 只有当content是纯数字时才尝试关联订单
            if (notice.getContent() != null && notice.getContent().matches("^\\d+$")) {
                try {
                    Integer orderId = Integer.parseInt(notice.getContent());
                    OrderInfo order = orderInfoMapper.selectOrderInfoById(orderId);
                    if (order != null) {
                        notice.setOrderNo(order.getOrderNo());
                        notice.setAmount(order.getAmount());
                        notice.setOrderStatus(order.getStatus());
                    }
                } catch (NumberFormatException e) {
                    // 如果content不是数字，则忽略订单关联
                    // 这允许content包含HTML内容或其他文本
                }
            }
        }

        return noticeMapper.updatenotice(notice);
    }

    /**
     * 批量删除通知管理
     * 
     * @param ids 需要删除的通知管理主键
     * @return 结果
     */
    @Override
    public int deletenoticeByIds(Long[] ids)
    {
        return noticeMapper.deletenoticeByIds(ids);
    }

    /**
     * 删除通知管理信息
     * 
     * @param id 通知管理主键
     * @return 结果
     */
    @Override
    public int deletenoticeById(Long id)
    {
        return noticeMapper.deletenoticeById(id);
    }
}
